package cn.shengchao.controler.ai.request;

import lombok.Data;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Min;
import javax.validation.constraints.Future;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 创建学习计划请求
 */
@Data
public class CreateStudyPlanRequest {
    
    /**
     * 用户ID
     */
    private Long userId;
    
    /**
     * 类目类型
     */
    @NotNull(message = "类目类型不能为空")
    private Long specificationType;
    
    /**
     * 掌握程度代码
     */
    @NotNull(message = "掌握程度代码不能为空")
    private String degreeOfMasteryCode;
    
    /**
     * 每日学习时长建议（小时）
     */
    @NotNull(message = "每日学习时长不能为空")
    @Min(value = 0, message = "每日学习时长必须大于等于0")
    private Double dailyStudyHours;
    
    /**
     * 开始时间
     */
    @NotNull(message = "开始时间不能为空")
    private LocalDateTime startTime;
    
    /**
     * 结束时间
     */
    @NotNull(message = "结束时间不能为空")
    @Future(message = "结束时间必须是将来的时间")
    private LocalDateTime endTime;
    
    /**
     * 学习建议
     */
    private String studyAdvice;
    
    /**
     * 学习日程列表
     */
    private List<StudyDay> scheduleItems;
    
    /**
     * 学习日程项
     */
    @Data
    public static class StudyDay {
        /**
         * 日期
         */
        @NotNull(message = "日期不能为空")
        private LocalDateTime date;
        
        /**
         * 任务名称
         */
        @NotNull(message = "任务名称不能为空")
        private String jobName;
        
        /**
         * 知识点ID
         */
        private Long knowledgePointId;
        
        /**
         * 知识点名称
         */
        private String knowledgePoint;
        
        /**
         * 学习时长（分钟）
         */
        @Min(value = 0, message = "学习时长必须大于等于0")
        private Integer studyTimeMinutes;
        
        /**
         * 是否已完成
         */
        private Boolean completed = false;
    }
}